home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_09_08 / 9n08084a < prev    next >
Text File  |  1991-07-06  |  1KB  |  51 lines

  1. /*********** EXCEPT.C COPYRIGHT 1990 GREGORY COLVIN ************
  2. This program may be distributed free with this copyright notice.
  3. ***************************************************************/
  4. #include <stdio.h>
  5. #include <string.h>
  6.  
  7. #define XDEBUG
  8.  
  9. #include "except.h"
  10.  
  11. X_TRAP *X_Trap = 0;
  12. XCEPTION X_Error = 0;
  13. volatile sig_atomic_t X_Signal;
  14. char *X_Assert;
  15.  
  16. void X_TrapError( void )
  17. {
  18.     if (X_Error) {
  19.         if (X_Trap)
  20.             longjmp(X_Trap->context,X_Error);
  21.  
  22.         if (X_Error == X_ERRNO)
  23.             fprintf(stderr,"C run-time libary error: %s\n",
  24.                            strerror(errno));
  25.         else if (X_Error == X_SIGNAL)
  26.             fprintf(stderr,"Signal raised: %d\n",
  27.                            (int)X_Signal);
  28.         else if (X_Error == X_ASSERT)
  29.             fprintf(stderr,"Assertion false: %s\n",
  30.                            X_Assert);
  31.         else if (X_Error == X_SYSTEM)
  32.             fprintf(stderr,"System call failed.\n");
  33.         else
  34.             fprintf(stderr,"Exception not handled.\n");
  35.         exit(EXIT_FAILURE);
  36.     }
  37. }
  38.  
  39. void X_HandleSignal( int sig )
  40. {
  41.     signal( sig, X_HandleSignal );
  42.     X_Signal = sig;
  43.     longjmp(X_Trap->context,X_SIGNAL);
  44. }
  45.  
  46. void X_ReturnSignal( int sig )
  47. {
  48.     signal( sig, X_ReturnSignal );
  49.     X_Signal = sig;
  50. }
  51.